package com.study.spark.scala.chapter07

object Scala05_Collection_4{
  def main(args: Array[String]): Unit = {
    // TODO 集合 - 功能函数 - WordCount案列 - 扩展:不规则数据
    val list = List(
      ("Hello World",3),
      ("Hello Spark",2)
    )
    println(list)//List((Hello World,3), (Hello Spark,2))

    // TODO 对于原始数据不是规则的数据处理
    // 思路二：直接从不规则数据中截取，计算拼凑出结果
    // 将k切开，然后将v赋给每一个k,最后将相同的k分为一组，再统计v

    // // TODO 1.将k切开，然后将v赋给每一个k
    val list1 = list.flatMap(
      str => {
        val line = str._1
        val cnt = str._2
        val datas = line.split(" ")
        datas.map(
          word => {
            (word, cnt)
          }
        )
      }
    )
    println(list1)
    //List((Hello,3), (World,3), (Hello,2), (Spark,2))

    // TODO 2.将相同的k分为一组
    val groupData: Map[String, List[(String, Int)]] = list1.groupBy(_._1)
    println(groupData)
    //Map(Hello -> List((Hello,3), (Hello,2)), Spark -> List((Spark,2)), World -> List((World,3)))

    // TODO 3.统计v
    val result: Map[String, Int] = groupData.mapValues(
      str => {
        str.map(_._2).sum
      }
    )
    println(result)//Map(Hello -> 5, Spark -> 2, World -> 3)


  }
}
